home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 26 / AACD 26.iso / AACD / System / XFD / Developer / Sources / ASM / DSC3.a < prev    next >
Encoding:
Text File  |  2001-09-16  |  3.1 KB  |  172 lines

  1. *******************************************************
  2. **             XFD external decruncher               **
  3. **                for DSC3 cruncher                  **
  4. **             adapted by Wanted Team                **
  5. *******************************************************
  6.  
  7.     INCDIR    "dh2:Include/"
  8.     INCLUDE    "libraries/xfdmaster.i"
  9.  
  10. ; xfdForeman structure MUST be first thing in all external decrunchers
  11.  
  12. ForeMan        moveq    #-1,d0        ;security
  13.         rts
  14.         dc.l    XFDF_ID        ;id
  15.         dc.w    1        ;version
  16.         dc.w    0
  17.         dc.l    0,0        ;private
  18.         dc.l    S_DSC3        ;first slave
  19.  
  20. **************************************************
  21.  
  22. ; xfdSlave structure: this one doesn't support data scanning
  23.  
  24. S_DSC3        dc.l    0        ;no more slaves
  25.         dc.w    2        ;version
  26.         dc.w    39        ;master version
  27.         dc.l    N_DSC3        ;name
  28.         dc.w    XFDPFF_DATA!XFDPFF_RECOGLEN!XFDPFF_USERTARGET
  29.         dc.w    0
  30.         dc.l    RB_DSC3        ;recog buffer
  31.         dc.l    DB_DSC3        ;decrunch buffer
  32.         dc.l    0        ;recog segment
  33.         dc.l    0        ;decrunch segment
  34.         dc.w    0,0
  35.         dc.l    12+2
  36.  
  37.         dc.b    "$VER: DSC3 v2.0 (28 Aug 2000) by Wanted Team",0
  38. N_DSC3        dc.b    "DSC3 data cruncher",0
  39.         even
  40.  
  41. ;-------------------------------------------------
  42.  
  43. ; Recog buffer function: receives buffer + length in a0/d0
  44.  
  45. RB_DSC3        MOVEQ    #0,D0
  46.         CMP.L    #"DSC3",(A0)+
  47.         BNE.B    .Exit
  48.         TST.B    (A0)
  49.         BNE.B    .Exit
  50.         MOVE.L    (A0),xfdrr_FinalTargetLen(A1)
  51.         MOVE.L    (A0),xfdrr_MinTargetLen(A1)
  52.         MOVEQ    #1,D0
  53. .Exit        RTS
  54.  
  55. ;-------------------------------------------------
  56.  
  57. ; Decrunch buffer function: receives bufferinfo in a0
  58. ; This style requires xfdmaster.library V39
  59. DB_DSC3        MOVEM.L    D2-D7/A2-A6,-(A7)
  60.         MOVEA.L    A0,A5
  61.         MOVE.L    xfdbi_UserTargetBuf(A5),A1
  62.         MOVE.L    xfdbi_SourceBuffer(A5),A0
  63.         BSR.B    D_DSC3
  64.  
  65.     moveq    #1,D0
  66.  
  67.         MOVEM.L    (A7)+,D2-D7/A2-A6
  68.         RTS
  69.  
  70. ;-------------------------------------------------
  71.  
  72. ; Decruncher from game "Black Viper" (c) 1996 LightShock/NEO Software
  73.  
  74. ;Input
  75. ; A0 = start of packed file
  76. ; A1 = destination pointer
  77.  
  78. D_DSC3
  79. ;    MOVEA.L    lbL000582(PC),A1
  80. ;    ADDA.L    #$400,A1
  81. ;    LEA    DSC3.MSG,A0
  82.     MOVEQ    #0,D7
  83.     MOVEQ    #$20,D0
  84.     BSR.S    lbC0003DC
  85.     CMPI.L    #$44534333,D1
  86.     BNE.S    lbC0003DA
  87.     MOVEQ    #$20,D0
  88.     BSR.S    lbC0003DC
  89.     MOVE.L    D1,D5
  90.     MOVEQ    #8,D0
  91.     BSR.L    lbC0003DC
  92.     MOVE.B    D1,(A1)+
  93.     MOVE.B    D1,D3
  94.     SUBQ.L    #1,D5
  95.     BNE.S    lbC00038E
  96.     RTS
  97.  
  98. lbC00038E    MOVEQ    #1,D0
  99.     BSR.S    lbC0003DC
  100.     TST.B    D1
  101.     BEQ.S    lbC0003AC
  102.     MOVEQ    #1,D0
  103.     BSR.S    lbC0003DC
  104.     TST.B    D1
  105.     BEQ.S    lbC0003BC
  106.     MOVEQ    #8,D0
  107.     BSR.S    lbC0003DC
  108.     MOVE.B    D1,(A1)+
  109.     MOVE.B    D1,D3
  110.     SUBQ.L    #1,D5
  111.     BNE.S    lbC00038E
  112.     RTS
  113.  
  114. lbC0003AC    MOVEQ    #4,D0
  115.     BSR.S    lbC0003DC
  116.     BTST    #3,D1
  117.     BEQ.S    lbC0003D0
  118.     ORI.B    #$F0,D1
  119.     BRA.S    lbC0003D0
  120.  
  121. lbC0003BC    MOVEQ    #5,D0
  122.     BSR.S    lbC0003DC
  123.     BTST    #4,D1
  124.     BNE.S    lbC0003CA
  125.     ADDQ.B    #8,D1
  126.     BRA.S    lbC0003D0
  127.  
  128. lbC0003CA    ORI.B    #$E0,D1
  129.     SUBQ.B    #8,D1
  130. lbC0003D0    ADD.B    D1,D3
  131.     MOVE.B    D3,(A1)+
  132.     SUBQ.L    #1,D5
  133.     BNE.S    lbC00038E
  134.     RTS
  135.  
  136. lbC0003DA    BRA.S    lbC0003DA
  137.  
  138. lbC0003DC    MOVEQ    #0,D1
  139.     TST.B    D7
  140.     BEQ.S    lbC0003F2
  141.     CMP.B    D7,D0
  142.     BLT.S    lbC000408
  143.     MOVE.B    D6,D1
  144.     ROL.B    D7,D1
  145.     SUB.B    D7,D0
  146.     MOVEQ    #0,D7
  147.     TST.L    D0
  148.     BEQ.S    lbC00041C
  149. lbC0003F2    CMPI.B    #8,D0
  150.     BLT.S    lbC000402
  151.     LSL.L    #8,D1
  152.     MOVE.B    (A0)+,D1
  153.     SUBQ.B    #8,D0
  154.     BNE.S    lbC0003F2
  155.     BRA.S    lbC00041C
  156.  
  157. lbC000402    MOVE.B    (A0)+,D6
  158.     MOVEQ    #8,D7
  159.     LSL.L    D0,D1
  160. lbC000408    ROL.B    D0,D6
  161.     MOVE.B    D6,D2
  162.     MOVEQ    #0,D4
  163.     BSET    D0,D4
  164.     SUBQ.B    #1,D4
  165.     AND.B    D4,D2
  166.     OR.B    D2,D1
  167.     NOT.B    D4
  168.     AND.B    D4,D6
  169.     SUB.B    D0,D7
  170. lbC00041C    RTS
  171.  
  172.